<!--
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->

<!--
`core-toolbar` is a horizontal bar containing items that can be used for
label, navigation, search and actions.  The items place inside the 
`core-toolbar` are projected into a `horizontal center layout` container inside of 
`core-toolbar`'s Shadow DOM.  You can use flex attributes to control the items'
sizing.

Example:

    <core-toolbar>
      <core-icon-button icon="menu" on-tap="{{menuAction}}"></core-icon-button>
      <div flex>Title</div>
      <core-icon-button icon="more" on-tap="{{moreAction}}"></core-icon-button>
    </core-toolbar>

`core-toolbar` has a standard height, but can made be taller by setting `tall`
class on the `core-toolbar`.  This will make the toolbar 3x the normal height.

    <core-toolbar class="tall">
      <core-icon-button icon="menu"></core-icon-button>
    </core-toolbar>

Apply `medium-tall` class to make the toolbar medium tall.  This will make the
toolbar 2x the normal height.

    <core-toolbar class="medium-tall">
      <core-icon-button icon="menu"></core-icon-button>
    </core-toolbar>

When `tall`, items can pin to either the top (default), middle or bottom.  Use
`middle` class for middle content and `bottom` class for bottom content.

    <core-toolbar class="tall">
      <core-icon-button icon="menu"></core-icon-button>
      <div class="middle indent">Middle Title</div>
      <div class="bottom indent">Bottom Title</div>
    </core-toolbar>
    
For `medium-tall` toolbar, the middle and bottom contents overlap and are
pinned to the bottom.  But `middleJustify` and `bottomJustify` attributes are 
still honored separately.
    
To make an element completely fit at the bottom of the toolbar, use `fit` along
with `bottom`.

    <core-toolbar class="tall">
      <div id="progressBar" class="bottom fit"></div>
    </core-toolbar>

`core-toolbar` adapts to mobile/narrow layout when there is a `core-narrow` class set
on itself or any of its ancestors.

@group Polymer Core Elements
@element core-toolbar
@homepage github.io
-->

<link rel="import" href="../polymer/polymer.html">

<polymer-element name="core-toolbar" attributes="justify middleJustify bottomJustify">
<template>

  <link rel="stylesheet" href="core-toolbar.css">

  <div id="bottomBar" class="toolbar-tools" center horizontal layout>
    <content select=".bottom"></content>
  </div>

  <div id="middleBar" class="toolbar-tools" center horizontal layout>
    <content select=".middle"></content>
  </div>

  <div id="topBar" class="toolbar-tools" center horizontal layout>
    <content></content>
  </div>

</template>
<script>

(function() {

  Polymer('core-toolbar', {
    
    /**
     * Controls how the items are aligned horizontally.
     * Options are `start`, `center`, `end`, `between` and `around`.
     *
     * @attribute justify
     * @type string
     * @default ''
     */
    justify: '',
    
    /**
     * Controls how the items are aligned horizontally when they are placed
     * in the middle.
     * Options are `start`, `center`, `end`, `between` and `around`.
     *
     * @attribute middleJustify
     * @type string
     * @default ''
     */
    middleJustify: '',
    
    /**
     * Controls how the items are aligned horizontally when they are placed
     * at the bottom.
     * Options are `start`, `center`, `end`, `between` and `around`.
     *
     * @attribute bottomJustify
     * @type string
     * @default ''
     */
    bottomJustify: '',
    
    justifyChanged: function(old) {
      this.updateBarJustify(this.$.topBar, this.justify, old);
    },
    
    middleJustifyChanged: function(old) {
      this.updateBarJustify(this.$.middleBar, this.middleJustify, old);
    },
    
    bottomJustifyChanged: function(old) {
      this.updateBarJustify(this.$.bottomBar, this.bottomJustify, old);
    },
    
    updateBarJustify: function(bar, justify, old) {
      if (old) {
        bar.removeAttribute(this.toLayoutAttrName(old));
      }
      if (justify) {
        bar.setAttribute(this.toLayoutAttrName(justify), '');
      }
    },
    
    toLayoutAttrName: function(value) {
      return value === 'between' ? 'justified' : value + '-justified';
    }
    
  });

})();

</script>
</polymer-element>
